##Exerccios Reamostragem e Simulao
###Exerccio 1.

#Os palmitos esto distribudos aleatoriamente na floresta? 
#Durante a aula terica mostramos como podemos usar uma distribuio terica para gerar dados que simulem 
#o cenrio previsto por nossa hiptese nula. No caso da posio dos palmitos adultos em uma parcela 
#de 10,24 ha de floresta (320320 m), nossa hiptese nula  que eles se distribuem aleatoriamente no espao. 
#Iniciamos a construo do cdigo para testar essa hiptese, o exerccio  terminar de testar a hiptese. 

#Abaixo reproduzimos o cdigo apresentado em aula para que possa continuar a partir dele.

#1.1. Baixe o arquivo palmadulto.txt e leia os dados no R, no esquea de conferir se o objeto de dados 
#foi lido corretamente.

eutad<-read.table("palmadulto.txt", header=TRUE, dec=".", as.is=TRUE)
eutad
str(eutad)
table(NA)

#1.2. Crie o objeto para guardar as distncias entre cada indivduo:
dist=matrix(NA, ncol=102, nrow=102)
dist

#1.3. Calcule a distncia observada entre cada indivduo e guarde o resultados em dist:

for(i in 1:101)                                    #distancia de um contra todos os outros, menos a distancia dele dele mesmo. 
{
  for(j in (i+1):102)                               
  {
    difx2=(eutad$gx[i]-eutad$gx[j])^2              #por triangulo retangulo, calculamos o tamanho do segmento de um cateto e elevamos ao quadrado
    dify2=(eutad$gy[i]-eutad$gy[j])^2              #por triangulo retangulo, calculamos o tamanho do segmento do outro cateto e elevamos ao quadrado   
    dist[i,j]<-sqrt(difx2 + dify2)                 #a soma do qudrado dos catetos, me da o quadrado da hipotenusa, que  o quadrado da distancia entre esses dois pontos. 
    dist[j,i]<-sqrt(difx2 + dify2)                 #tirando a raz quadrada da hipotenusa, temos a distancia.Que deve ser feita nas duas direes, j que todos os pontos estao sendo considerados.   
  }
  
}
dist


#1.4.Verifique o objeto dist 
dist[1:10, 1:10]

#e calcule o parmetro chamado de distncia mdia do vizinho mais prximo (MNN):

(nn<-apply(dist, 1, min, na.rm=TRUE))                      #a distancia minima  o menor valor de dist encontrado para cada relao ixj
(mnn<-mean(nn))                                            #a media  a media de todas as distancias minimas, para os 102 pontos




#Simulando: 
#OBS.: A resposta foi dada passo a passo, de forma acumulada. O resultado final de todos os itens est aps o item 1.8.5

#At agora calculamos o valor esperado da distncia mdia do vizinho mais prximo. 
#Os prximos passos, so 1):
  
# 1.5. Crie um vetor resultado, com 1000 NA's, para guardar os valores de cada simulao.
resultado<-rep(NA, 1000)                                      #resultado ser uma repetio de 1000 NA's. Esses NA sero substituidos pelos valores gerados pelo for, depois. 


#1.6. Guarde o valor observado na primeira posio de resultado;
resultado[1]<-mnn                                             #na primeira posio do resultado, est nossa media calculada ali em cima. Isso pq queremos encontrar o valor encontrado na nossa simulao, j que esse valor  o real.    

#1.7. Crie um ciclo com contador (i) que vai de 2 a 1000;
for(i in 2:1000)                                              #o ciclo comea do 2 pois a primeira posio foi fixada com o valor da mdia. ou seja, o primeiro valor de NA foi substituido pela MNN e a partir do segundo, ser substituido pelos valores gerados no ciclo.   
{
    
}
  
#1.8. Dentro do ciclo:
#1.8.1. Crie o objetos xsim, um vetor com valores amostrados aleatoriamente de uma distribuio uniforme de 0 a 320 (o tamanho x da parcela). 
  #Lembre-se de sortear o mesmo quantidade de valores que a populao de palmito observado;
#1.8.2. Faa o mesmo que no passo anterior e guarde no objeto ysim;

for(i in 2:1000)
{ 
  xsim<-round(runif(102,0,320),1)                     #criando UMA simulao de distribuio uniforme. mas no queremos UMA, queremos 1000, diferentes entre si, por isso essas simulaes entram no ciclo. 
  ysim<-round(runif(102,0,320),1)
}

#1.8.3. Como no tpico anterior, crie uma matriz para guardar as distncias entre cada valor xy simulados;

for(k in 2:1000)
{ 
  xsim<-round(runif(102,0,320),1)
  ysim<-round(runif(102,0,320),1)
  dist2<-matrix(NA, 102, 102)                         #como teremos 1000 distribuies simuladas, precisamos de uma matriz que guarde esses mil valores. 
}


#1.8.3. Crie os ciclos para o calculo das distncias como no tpico anterior;

for(k in 2:1000)
{ 
  xsim<-round(runif(102,0,320),1)
  ysim<-round(runif(102,0,320),1)
  dist2<-matrix(NA, ncol=102, nrow=102)      #ele tb tem que ser rodado varias vezes, para calc todas as dist

      for(i in 1:101)
          {
          for(j in (i+1):102)
          {
          difx2<-(xsim[i]-xsim[j])^2
          dify2<-(ysim[i]-ysim[j])^2
          dist2[i,j]<-sqrt(difx2 + dify2)
          dist2[j,i]<-sqrt(difx2 + dify2)
          }
          }
  nn2<-apply(dist2, 1, min, na.rm=TRUE)
  mnn2<-mean(nn2)
  resultado[k]<-mnn2
}

#1.8.4. Guarde o valor da distncia mdia do vizinho mais prximo dos dados simulados na posio i do vetor resultado;
#resultado[k]<-mnn2           #em todas as posies de resultado, teremos o resultado do ciclo. como resultado ja comea pela segunda posio, o total : MNN MAIS as outras geradas pela simulao

#1.8.5. Feche o ciclo. }

for(k in 2:1000)
{ 
  xsim<-round(runif(102,0,320),1)
  ysim<-round(runif(102,0,320),1)
  dist2<-matrix(NA, ncol=102, nrow=102)      #ele tb tem que ser rodado varias vezes, para calc todas as dist

      for(i in 1:101)
          {
          for(j in (i+1):102)
          {
          difx2<-(xsim[i]-xsim[j])^2
          dify2<-(ysim[i]-ysim[j])^2
          dist2[i,j]<-sqrt(difx2 + dify2)
          dist2[j,i]<-sqrt(difx2 + dify2)
          }
          }
  nn2<-apply(dist2, 1, min, na.rm=TRUE)
  mnn2<-mean(nn2)
  resultado[k]<-mnn2
}


resultado

#1.9. Faa um histograma dos valores simulados e coloque uma linha vermelha vertical na posio do valor observado;

hist(resultado)
abline(v=mnn, col="red")

#1.10. Calcule a probabilidade do valor MNN observado ser gerado por uma distribuio espacial aleatria.

probabilidade=sum(resultado<=mnn)/1000
probabilidade

